package de.hdu.mfz.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

import de.hdu.mfz.model.Route;
import de.hdu.mfz.model.Routenpunkt;
import de.hdu.mfz.model.User;

/**
 * 
 * @author deStSchmit
 * RoutenpunktDAO Funktionen neu am 08.05.2012
 *
 */
public class RoutenpunktDAO {


private Session session;	


	public RoutenpunktDAO(Session session) {
		// Variante mit Dependency-Injection
		this.session = session;
	}	
	
	public RoutenpunktDAO() {
		// Variante mit Service-Lookup (Martin Fowler)
		this( new AnnotationConfiguration().configure().buildSessionFactory().getCurrentSession());
	}	

	public void insert( Routenpunkt routenpunkt) {
		session.save(routenpunkt);
		session.flush();
	}
	
	public void delete( Routenpunkt routenpunkt) {
		session.delete(routenpunkt);
	}
	
	
	// hier kann man beide alternativen get  oder load nehmen, get geht nicht direkt gegen die datenbank sondern erst auf den chache -> performanter
	public Routenpunkt findById( int routenpunktId) {
		return (Routenpunkt)session.load(Routenpunkt.class, routenpunktId);
		//return (Route)session.get(Route.class, routeId);
	}
	
	
	//Liste aller Routenpunkte
	@SuppressWarnings("unchecked")
	public List<Routenpunkt> findAll() {
		Query query = session.createQuery("SELECT rp FROM Routenpunkt as rp");
		return query.list();
	}
	
	
	// Liste aller Routenpunkte zu einer Route
	@SuppressWarnings("unchecked")
	public List<Routenpunkt> findByRoute(Route route) {
		Query query = session.createQuery("SELECT rp FROM Routenpunkt as rp WHERE rp.route = :route");
		query.setEntity("route", route);
		return query.list();
	}
	
	
	// Liste aller Routenpunkte zu einem Ort
	@SuppressWarnings("unchecked")
	public List<Routenpunkt> findByOrt(String ort) {
		Query query = session.createQuery("SELECT rp FROM Routenpunkt as rp WHERE rp.ort = :ort");
		query.setString("ort", ort);
		return query.list();
	}
	
	// Liste aller Routenpunkte zu einer Mitfahrt

	
	
	
	
	
	
	
//	private Session session;	
//	
//	public RoutenpunktDAO(){
//		SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
//		session = sf.getCurrentSession();
//		session.beginTransaction();
//	}	
//	
//	
//	public Routenpunkt load(int routepunktId) {
//		//Mittels load auf spezielle Tabelle zugreifen
//		return (Routenpunkt) session.load(Routenpunkt.class, routepunktId);
//	}
//	
//	public void saveRoutenpunkt(Routenpunkt rp){
//		session.save(rp);
//		session.getTransaction().commit();
//	}

}
